package com.example.dbcms.controller.admin;

import com.example.dbcms.annotation.Log;
import com.example.dbcms.domain.Residents;
import com.example.dbcms.service.ResidentService;
import com.example.dbcms.utils.ResultVoUtil;
import com.example.dbcms.vo.ResultVo;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Controller
@RequestMapping("/admin/queryInfo")
@Api("用户管理API")
public class ResidentController {

    @Autowired
    private ResidentService residentService;

    /**
     * 有条件则条件查询,否则查询全部
     * @param resident  条件查询,将条件传回
     * @param modelMap
     * @return
     */
    @ApiOperation("跳转到用户信息页面")
    @GetMapping("/residentInfo")
    @Log(type="跳转到用户信息页面")
    public String residentInfo(Residents resident,ModelMap modelMap) {
        /** 得到分页结果 */
        PageInfo<Residents> residentsPageInfo = residentService.selectAllResidents(resident);
        modelMap.put("residentInfo", residentsPageInfo.getList());
        modelMap.put("resident",resident);
        modelMap.put("pageInfo",residentsPageInfo);
        return "admin/resident/index";
    }

    /**
     * 通过id查找居民信息跳转到编辑页面
     * @param id
     * @param modelMap
     * @return
     */
    @ApiOperation("弹出编辑居民信息页面")
    @GetMapping("/editResident/{id}")
    @Log(type="弹出编辑居民信息页面")
    public String editResidentInfo(@PathVariable("id") int id, ModelMap modelMap){
        modelMap.put("resident",residentService.getResidentById(id));
        return "admin/resident/edit";
    }

    /**
     * 修改居民信息
     * @param residents 居民信息
     * @return
     */
    @ApiOperation("修改居民用户信息")
    @PostMapping("/updateResident")
    @ResponseBody
    @Log(type="修改居民用户信息")
    public ResultVo saveResident(Residents residents){
        if(residentService.updateUser(residents)==1){
            return ResultVoUtil.SAVE_SUCCESS;
        }
        return ResultVoUtil.error("更新失败");
    }

    /**
     * 通过id查找居民信息，跳转到详细页面
     * @param id
     * @param modelMap
     * @return
     */
    @ApiOperation("弹出居民信息详细页面")
    @GetMapping("/detailResident/{id}")
    @Log(type="弹出居民信息详细页面")
    public String detailResident(@PathVariable("id") int id,ModelMap modelMap){
        modelMap.put("resident",residentService.getResidentById(id));
        return "admin/resident/detail";
    }

    /**
     * 通过id删除居民信息
     * @param id
     * @return
     */
    @ApiOperation("通过id删除居民信息")
    @GetMapping("/deleteResident/{id}")
    @ResponseBody
    @Log(type="通过id删除居民信息")
    public ResultVo deleteResident(@PathVariable("id") int id){
        return residentService.deleteUserById(id)==1?ResultVoUtil.success("删除成功"):ResultVoUtil.error("删除失败");
    }

    /**
     * 页面跳转,到居民信息新增页面
     * @return
     */
    @ApiOperation("跳转到添加居民信息页面")
    @GetMapping("/addResident")
    @Log(type="跳转到添加居民信息页面")
    public String addResident(){
        return "admin/resident/add";
    }

    /**
     * 新增居民信息
     * @param residents  居民信息
     * @return
     */
    @ApiOperation("新增居民信息到数据库")
    @PostMapping("/addResident")
    @ResponseBody
    @Log(type="新增居民信息到数据库")
    public ResultVo addResidentToDb(Residents residents){
        if(residentService.addUser(residents)==1){
            return ResultVoUtil.success("添加成功");
        }
        return ResultVoUtil.error("添加失败");
    }

    /**
     * 删除多条记录
     * @param ids 居民信息id列表
     * @return
     */
    @ApiOperation("删除多条居民信息")
    @PostMapping("/deleteMultiple")
    @ResponseBody
    @Log(type="删除多条居民信息")
    public ResultVo deleteMultipleResidents(@RequestParam(value = "ids") List<Integer> ids){
        int count = residentService.deleteMultipleResident(ids);
        if(count==ids.size()){
            return ResultVoUtil.success("删除成功");
        }
        return ResultVoUtil.error("删除多条数据失败");
    }
}
